In [1]:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import math
from math import sqrt
from matplotlib import style
style.use("ggplot")
In [2]:
k = 4.041816237
Ek = 0.012 # ~
Dk = k * Ek
print(Dk)
In [3]:
def EDiff(a, b):
hi = max(a, b)
lo = min(a, b)
return (hi - lo) / hi
EDiff(79.8811, 79.0625)
Out[3]:
In [4]:
allTimes = [
[21.852, 21.813, 21.802, 21.805, 21.813, 21.818],
[20.658, 20.659, 20.635, 20.596, 20.599],
[19.415, 19.332, 19.376, 19.360, 19.408, 19.262, 19.323, 19.267, 19.139],
[18.323, 18.330, 18.317, 18.271, 18.314, 18.244],
[17.430, 17.411, 17.380, 17.357, 17.310, 17.255],
[16.703, 16.657, 16.682, 16.687, 16.706],
[16.139, 16.153, 16.078, 16.053, 16.059],
[15.834, 15.767, 15.806, 15.716, 15.766],
[15.671, 15.636, 15.605, 15.631, 15.549, 15.603]
]
In [5]:
D = 90
h = list(reversed([h / 10. for h in range(0, 125 - D // 2 + 1, 10)]))
t = [allTimes[i][-1] for i in range(len(allTimes))]
t = np.array(t)
h = np.array(h)
print(h)
print(t)
In [6]:
t = t / 5.
print(t)
In [7]:
plt.figure(figsize=(7, 7))
plt.scatter(h*h, t*t)
plt.show()
In [8]:
def rmse_corrected(predictions, targets):
return np.sqrt(((predictions - targets) ** 2).sum() / (predictions.size - 1))
F = pd.DataFrame(allTimes[2])
absErr = rmse_corrected(F, F.mean())[0]
timerErr = 0.001 # can be ignored
absErr = sqrt(timerErr**2 + absErr**2)
relErr = absErr / F.mean()[0];
print("Absolute T error = ", absErr)
print("Relative T error = ", relErr)
Ek = 0.012 # calculated
Em = 0.3 / 1012.5
Et = relErr /5
print("Realtive t = T / 5 error = ", Et)
Ei = math.sqrt(Ek**2 + Em**2 + (2*Et)**2)
print("Impulse relative error = ", Ei) # for the first exp
print(F.mean())
In [9]:
def sciPrint(val, relErr):
print(val, "+-", val * relErr, "(", relErr * 100., "%)")
m = 1012.5 * 1e-3
Dm = 0.3 * 1e-3
Ri = 12.5
DRi = 0.1
EiTheory1 = sqrt((Dm/m)**2 + (2*DRi/Ri)**2)
print(EiTheory1)
In [10]:
ITheory1 = 1./2.*m*(Ri**2)
print(ITheory1, "+-", ITheory1 * EiTheory1)
In [11]:
T = 22.096 / 5.
IExp1 = m * k * (T**2)
EIExp1 = sqrt(Ek**2 + (Dm/m)**2 + (2*Et)**2)
# print(Ei1)
print(IExp1, "+-", IExp1 * EIExp1)
In [12]:
T = 21.320 / 5.
mc = 0.9762
Dmc = 0.0001
m2 = m + mc
EIExp2 = sqrt((Dm**2 + Dmc**2) / (m2**2) + Ek**2 + (2*Et)**2)
IExp2 = m2*k*T**2
sciPrint(IExp2, EIExp2)
In [13]:
rc = 15.74 / 2
Drc = 0.01
Erc = Drc / rc
Rc = rc + 0.53
DRc = 0.01
ERc = DRc / Rc
DRc2 = (ERc * 2) * (Rc**2)
Drc2 = (Erc * 2) * (rc**2)
Erc2plusRc2 = sqrt(DRc2**2 + Drc2**2) / (Rc**2 + rc**2)
print("Erc2plusRc2 = ", Erc2plusRc2)
ITheoryC = 1./2. * mc * (Rc**2 + rc**2)
ITheory2 = ITheory1 + ITheoryC
print(ITheoryC)
EiTheoryC = sqrt((Dmc / mc)**2 + Erc2plusRc2**2)
EiTheory2 = sqrt((EiTheory1 * ITheory1)**2 + (EiTheoryC * ITheoryC)**2) / ITheory2
sciPrint(ITheory2, EiTheory2)
In [14]:
print(abs(ITheory2 - IExp2))
In [15]:
IExp3 = IExp2 - IExp1
print(EIExp2,IExp2,EIExp1*IExp1)
DIExp3 = sqrt((EIExp2 * IExp2)**2 + (EIExp1 * IExp1)**2)
EIExp3 = DIExp3 / IExp3
sciPrint(IExp3, EIExp3)
In [16]:
sciPrint(ITheoryC, EiTheoryC)
In [17]:
mb = 1.2046
Dmb = 0.0001
m4 = mb + m
T = 18.620 / 5.
EIExp4 = sqrt((Dm**2 + Dmb**2) / (m4**2) + Ek**2 + (2*Et)**2)
IExp4 = m4 * k * T**2
sciPrint(IExp4, EIExp4)
In [18]:
a = 2.7
Da = 0.04
L = 21.
DL = 0.1
Ea = Da / a
EL = DL / L
Da2 = (Ea * 2) * (a**2)
DL2 = (EL * 2) * (L**2)
Ea2plusL2 = sqrt(Da2**2 + DL2**2) / (a**2 + L**2)
print("Ea2plusL2 = ", Ea2plusL2)
ITheoryB = 1./12. * mb * (a**2 + L**2)
ITheory4 = ITheory1 + ITheoryB
EiTheoryB = sqrt((Dmb / mb)**2 + Ea2plusL2**2)
sciPrint(ITheoryB, EiTheoryB)
EiTheory4 = sqrt((EiTheory1 * ITheory1)**2 + (EiTheoryB * ITheoryB)**2) / ITheory4
sciPrint(ITheory4, EiTheory4)
In [19]:
IExp5 = IExp4 - IExp1
DIExp5 = sqrt((EIExp4 * IExp4)**2 + (EIExp1 * IExp1)**2)
EIExp5 = DIExp5 / IExp5
sciPrint(IExp5, EIExp5)
In [20]:
# for theory see last experiment
In [21]:
epsTimes1 = [((allTimes[i][-2] - allTimes[i][-1]) / allTimes[i][-1]) for i in range(len(allTimes))]
print(epsTimes1)
epsTimes2 = [((allTimes[i][-3] - allTimes[i][-1]) / allTimes[i][-1]) for i in range(len(allTimes))]
print(epsTimes2)
In [22]:
ms1 = 709.8 * 1e-3
ms2 = 707.4 * 1e-3
ms = m + ms1 + ms2
Dms1 = Dms2 = 0.1 * 1e-3
Dms = sqrt(Dms1 ** 2 + Dms2 **2 + Dm**2)
Ems = Dms / ms
T = np.array([allTimes[i][-1] / 5. for i in range(len(allTimes))])
DT = T * Et
print("T = ", T)
print("DT = ", DT)
IExp6 = k * (ms1 + ms2 + m) * T * T
ISep = IExp6 - IExp1
EIExp6 = sqrt(Ek**2 + Ems**2 + (2*Et)**2)
EISep = np.sqrt((EIExp6 * IExp6)**2 + (EIExp1 * IExp1)**2) / ISep
print("ISep = ", ISep)
print("EISep = ", EISep*100) # experimental I error
DISep = ISep * EISep
print("DISep = ", DISep)
dh = 0.1
dh2 = 2*dh*h
print("h2 = ", h*h)
print("dh2 = ", dh2)
print("Eh2 = ", dh2 / (h*h))
In [23]:
plt.scatter(y=T*T, x=h*h)
plt.show()
In [24]:
print(T*T)
print(DT*2*T)
print((DT*2*T)/(T*T))
print(h*h)
Координаты для построения
In [25]:
scale = 3.
print(T*T / scale)
print(DT*2*T / scale)
print(h*h / scale)
print(dh2 / scale)
К графику (T^2 от H^2)
In [26]:
ms1 = 709.8 * 1e-3
ms2 = 707.4 * 1e-3
ms = m + ms1 + ms2
Dms1 = Dms2 = 0.1 * 1e-3
Dms = sqrt(Dms1 ** 2 + Dms2 **2 + Dm**2)
Ems = Dms / ms
ms12 = ms1 + ms2
Dms12 = sqrt(Dms1 ** 2 + Dms2 **2)
Ems12 = Dms12 / ms12
bPlot = ms12 / (k * ms);
EbPlot= sqrt(Ems12**2 + Ems **2 + Ek**2)
sciPrint(bPlot, EbPlot)
In [27]:
Rpuck = 9.1 / 2.
DRpuck = 0.01
ERpuck = DRpuck/ Rpuck
Ipuck = 1./2.*ms12 * (Rpuck**2)
EIpuck = sqrt(Ems12**2 + (2*ERpuck)**2)
aI = Ipuck + ITheory1
EaI = (Ipuck* EIpuck + ITheory1*EiTheory1) / aI
sciPrint(aI, EaI)
a = aI / (ms * k)
Ea = sqrt(EaI**2 + Ems **2 + Ek**2)
sciPrint(a, Ea)
In [34]:
bExpMin = 2.9/21.5
bExpMin
Out[34]:
In [35]:
bExpMax = 3.5/21.5
bExpMax
Out[35]:
In [36]:
DbExp = (bExpMax - bExpMin) / sqrt(9)
bExp = 3.2/21.5
sciPrint(bExp, DbExp/(bExp))
In [62]:
a = 9.3
Da = 0.6/3.
sciPrint(a, Da/a)
In [ ]: